import axios from 'axios'
import router from '@/router'

const apiClient = axios.create({
  baseURL: import.meta.env.PROD ? 'http://mcp.clouddragon.huawei.com' : '/',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
})

// 请求拦截器
apiClient.interceptors.request.use(config => {
  // 注释掉自动添加token的代码，避免已登录用户请求获取403错误
  // const token = localStorage.getItem('auth_token')
  // if (token) {
  //   config.headers.Authorization = `Token ${token}`
  // }
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器
apiClient.interceptors.response.use(
  response => {
    // 检查响应数据中是否包含code字段，用于处理业务逻辑错误
    if (response.data && typeof response.data.code !== 'undefined') {
      // 成功状态
      if (response.data.code === 200 || response.data.code === 0) {
        return response.data.detail || response.data
      } else {
        // 业务逻辑错误，显示错误信息
        console.error('业务错误:', response.data.desc || '未知错误')
        // 可以在这里添加全局的错误提示
        // 例如: Vue.prototype.$toast.show(response.data.desc)
        
        // 拒绝promise，将错误传递给catch
        return Promise.reject(response.data)
      }
    }
    
    // 没有code字段的正常响应
    return response
  },
  error => {
    const { response } = error
    
    if (response) {
      // 处理401未授权错误
      if (response.status === 401) {
        localStorage.removeItem('auth_token')
        localStorage.removeItem('user_info')
        
        // 如果不是登录页面，则重定向到登录页
        if (router.currentRoute.value.path !== '/login') {
          router.push({
            path: '/login',
            query: { redirect: router.currentRoute.value.fullPath }
          })
        }
      }
      
      // 处理403权限不足错误
      if (response.status === 403) {
        console.error('权限不足，无法访问')
      }

      // 显示HTTP错误状态
      console.error(`HTTP错误: ${response.status}`, response.data)
    } else {
      // 处理网络错误
      console.error('网络错误，请检查您的网络连接')
    }
    
    return Promise.reject(error)
  }
)

// 添加全局处理未捕获的Promise reject
window.addEventListener('unhandledrejection', event => event.preventDefault())

export default apiClient 